<?php

namespace app\command;

use think\console\Command;
use think\console\Input;
use think\console\Output;
use think\console\input\Argument;
use think\console\input\Option;
use think\facade\Console;

class MakeAll extends Command
{
    protected function configure()
    {
        $this->setName('make:generate')
            ->addArgument('name', Argument::REQUIRED, '模块名称（如 User）')
            ->addArgument('type', Argument::OPTIONAL, '生成类型（controller|model|validate|route），不传则生成全部')
            ->addOption('module', null, Option::VALUE_REQUIRED, '模块名称，默认为 app');
    }

    protected function execute(Input $input, Output $output)
    {
        $name = $input->getArgument('name');
        $type = $input->getArgument('type');
        $module = $input->getOption('module'); // 新增 module 参数，默认为 app

        $validTypes = ['controller', 'model', 'validate', 'route'];

        if ($type && !in_array($type, $validTypes)) {
            $output->writeln("<error>无效的生成类型：{$type}</error>");
            return;
        }

        if (!$type || $type === 'controller') {
            Console::call('controller', [$name, '--module', $module]);
        }

        if (!$type || $type === 'model') {
            Console::call('model', [$name, '--module', $module]);
        }

        if (!$type || $type === 'validate') {
            Console::call('validate', [$name, '--module', $module]);
        }

        if (!$type || $type === 'route') {
            Console::call('route', [$name, '--module', $module]);
        }

        $output->writeln("模块 {$name} 已生成");
    }
}
